package test;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class FutureTaskExample {
    /*
    在这个示例中，我们创建了一个实现了Callable接口的类，
    并实现了它的call()方法。
    然后，我们将这个Callable对象传递给FutureTask的构造函数中，
    并创建了一个FutureTask对象。
    接着，我们将这个FutureTask对象传递给一个新的线程，
    并启动了这个线程。
    最后，我们使用get()方法获取了线程的返回值。 */
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        Callable<Integer> callable = new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                int result = 0;
                for (int i = 0; i <= 50; i++) {
                    result += i;
                    Thread.sleep(100);
                }
                return result;
            }
        };

        FutureTask<Integer> futureTask = new FutureTask<>(callable);

        Thread thread = new Thread(futureTask);
        thread.start();

        System.out.println("Calculating sum of numbers from 1 to 10...");
        int sum = futureTask.get();

        System.out.println("Sum is " + sum);
    }
}
